iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 26
1
Security

資安0~100K只要30天系列 第 26

Day 26 - 逆向會被開罰單哦 (二)

  • 分享至 

  • xImage
  •  

逆向小體驗

大家可以先到 picoCTF 2019 這個平台看看
裡面就有個 Reverse Engineering 這個分類
除了逆向還有其他之前介紹過的類型
大家也可以玩玩看

asm1

首先我們來看看這題
最最最基本的組合語言
題目敘述中告訴我們 asm1 是一個函數
並且在 call 這個 function 時放入參數 0x4f3

在這邊參數會被放在 ebp+0x8 的位置
大家先記著
這部分會留到 Pwn 的時候再做詳細說明

我們直接從第四行開始看
首先將我們的的參數跟 0x45d 做比較
然後第二行的 jg 是說如果上面的 cmp 比較結果是大於的話就跳到指定位置 <asm1+37>
也就是這份 code 的第 14 行啦~
直接跳過去的意思就是中間的都不用做事喔
直接到指定位置再開始做事就好

所以接著是將參數跟 0x7cd 比較
jne 就是問說是否不相等
如果是就跳到 <asm1+54> 的位置上
所以當然跳因為 0x4f3 不等於 0x7cd 嘛~

接著就是將我們的參數 ebp+0x8 這個位置的值放到 eax 這個暫存器中
還記得上一篇說的嗎
任何的運算都需要透過暫存器
然後就是把 eax 加上 0x17
所以答案就是 0x50a 囉~

這邊補充一點小東西
就是上面那些 jne 啦,jg
是如何判斷前一段的 cmp 是大是小呢

Flag Register

在組語中有幾個重要的暫存器叫做 flag
其用來表示一些程式運行上重要的狀態
在這邊介紹幾個重要且常見的

名稱 功能
CF (Carry Flag) 最高位元是否有進位
ZF (Zero Flag) 運算後是記憶體否為 0
SF (Sign Flag) 運算後是否為負數(有號數最高位為 1)
OF (Overflow Flag) 運算後是否有 overflow

比如說上面題目遇到的 jne
cmp 比較時會將前面的值與後面的值相減
所以 0x4f3 - 0x7cd 不等於 0ZF=0
這樣就代表不相等了~

再比如說 jg
兩數相減如果 SF=0 && ZF=0 就代表成立
因此上面的 0x4f3 - 0x45d 出來的值是正數且不為 0 (就是不相等啦)
所以就也會達成條件囉~


上一篇
Day 25 - 逆向會被開罰單哦 (一)
下一篇
Day 27 - Pwn 0x1
系列文
資安0~100K只要30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言